/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pkg1ifxSeguridad;

import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.mail.*;
import javax.mail.internet.*;
import com.sun.mail.smtp.*;
import java.security.Security;
import pkg1ifxArchivos.cifxLogs;
import pkg1ifxArchivos.cifxConfig;
//import javax.

/**
 *
 * @author strailaparicio
 */
public class cifxUsuario {
    
    private String sservidor="infogex.com";
    private String susuario="infogex@infogex.com";
    private String spwd="8000635945";
    private boolean bautorizado=false;
    private String[] spermisos=new String[4];
    private String[] shorarios=new String[250];
    private Properties props = new Properties();
    private String sprotocolo="pop3";
    private cifxLogs olog = new cifxLogs();
    private Session session=null;
    private Store store=null;
    private String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
    private String MAIL_PORT="995";
    private String SSL_PORT = "995";
    private cifxConfig oconfusuarios = new cifxConfig("usuarios.conf",olog);
    private cifxConfig oconfsrvmail = new cifxConfig("servidor_mail.conf",olog);
    private boolean busarSSL=true;
    
    public cifxUsuario(cifxLogs dpathlog)
    {
        olog=dpathlog;
        cargarParametrosArchivo();
        

    }
    public cifxUsuario()
    {
        
        cargarParametrosArchivo();

    }
    private void cargarParametrosArchivo()
    {
        Security.addProvider( new com.sun.net.ssl.internal.ssl.Provider());
        
        if(oconfsrvmail.getparamOK())
        {
            sprotocolo=oconfsrvmail.traeParametro("PROTOCOLO");
            sservidor=oconfsrvmail.traeParametro("SERVIDOR_CORREO");
            MAIL_PORT=oconfsrvmail.traeParametro("PUERTO_CORREO"); 
            if(oconfsrvmail.traeParametro("SSL").equals("NO"))
                busarSSL=false;
//            if(sprotocolo.equals("smtp"))
//            {
                props.setProperty( "mail."+sprotocolo+".socketFactory.class", SSL_FACTORY);
                props.setProperty( "mail."+sprotocolo+".port", MAIL_PORT);
                props.setProperty( "mail."+sprotocolo+".socketFactory.port", MAIL_PORT);
                if(!busarSSL)
                    props.setProperty( "mail."+sprotocolo+".socketFactory.fallback", "false");
//            }
//            else
//            {
//                props.setProperty( "mail.pop3.socketFactory.class", SSL_FACTORY);
//                props.setProperty( "mail.pop3.port", MAIL_PORT);
//                props.setProperty( "mail.pop3.socketFactory.port", MAIL_PORT);
//            }
            
        }
        else
        {
            props.setProperty( "mail.pop3.socketFactory.class", SSL_FACTORY);
            props.setProperty( "mail.pop3.port", MAIL_PORT);
            props.setProperty( "mail.pop3.socketFactory.port", MAIL_PORT);
        }
        bautorizado=false;
        session = Session.getDefaultInstance(props);
    }
    /**
     * Esta funcion esta deshabilitada para uso interno
     * Conectar con URL
     * servidor de correo.
     * @param surln , se refiere a protocol://username:password@hostname:puerto/
     */
    private void Conectar(String surln)
    {
        //Esto es para que deje entrar en la aplicacion sin problema
        //
        ///Strail Quitar
        //bautorizado=true;
        ////Strail Quitar
        
        URLName urln = new URLName(surln);
        try {
            
            store = session.getStore(urln);
            store.connect();
            if(store.isConnected())
                bautorizado=true;
            
        }catch (NoSuchProviderException ex) {
            olog.outMensaje("cifxUsuario.Conectar(surln): NoSuchProviderException ERROR "+ex.toString());
        }catch (MessagingException ex) {
            olog.outMensaje("cifxUsuario.Conectar(surln): MessagingException ERROR "+ex.toString());
        }
    }
    public void setServidor(String sdato)
    {
        sservidor=sdato;
    }
    public void setUsuario(String sdato)
    {
        susuario=sdato;
    }
    public void setPWD(String sdato)
    {
        spwd=sdato;
    }
    public void Conectar()
    {
        String stmp="";
        session = Session.getDefaultInstance(props, null);
        
        try {
            
            store = session.getStore(sprotocolo);
            store.connect(sservidor, susuario, spwd);
            
            if(store.isConnected())
            {
                //Cargando los permisos del archivo de permisos
                if(oconfusuarios.getparamOK())
                {
                    stmp=oconfusuarios.traeParametro(susuario);
                    if(stmp.length()>0)
                    {
                        stmp=stmp.substring(stmp.indexOf("=")+1);//   stmp.indexOf("=");
                        spermisos=stmp.split(",");
                        bautorizado=true;
                        olog.outMensaje("cifxUsuario.cifxUsuario(): PERMISOS OK USUARIO"+susuario);
                    }
                    else
                    {
                        olog.outMensaje("cifxUsuario.cifxUsuario(): EL USUARIO NO TIENE PERMISOS "+susuario);
                        bautorizado=false;
                    }

                }
                else
                {
                    olog.outMensaje("cifxUsuario.cifxUsuario(): ERROR AL CARGAR LOS PERMISOS ");
                    bautorizado=false;
                }
                
            }
            
        } catch (NoSuchProviderException ex) {
            //Logger.getLogger(cifxUsuario.class.getName()).log(Level.SEVERE, null, ex);
            olog.outMensaje("cifxUsuario.cifxUsuario(): NoSuchProviderException ERROR "+ex.toString());
            bautorizado=false;
        } catch (MessagingException ex) {
            //Logger.getLogger(cifxUsuario.class.getName()).log(Level.SEVERE, null, ex);
            olog.outMensaje("cifxUsuario.cifxUsuario(): MessagingException ERROR "+ex.toString());
            bautorizado=false;
        }
    }
    
    public boolean Autortizado()
    {
        return bautorizado;
    }
    
}
